package main

import "fmt"

func main() {
	//使用select解决管道内取数据时数据阻塞问题
	var intChan chan int
	var strChan chan string
	intChan = make(chan int, 10)
	for i := 0; i < 10; i++ {
		intChan <- i
	}
	strChan = make(chan string, 10)
	for i := 0; i < 10; i++ {
		strChan <- "hello" + fmt.Sprintf("%d", i)
	}
label:
	for {
		select {
		case v := <-intChan: //如果这里没有关闭，不会造成阻塞，会自动到下一个case匹配
			fmt.Printf("从intchan读取数据%v\n", v)
		case v := <-strChan: //如果这里没有关闭，不会造成阻塞，会自动到下一个case匹配
			fmt.Printf("从strchan读取数据%v\n", v)
		default:
			fmt.Println("都去不到了，可以加入业务逻辑")
			break label
		}
	}
}
